package com.zxjbyte.yiyi.framework.quartz.listener;

import org.quartz.*;
import org.quartz.listeners.SchedulerListenerSupport;

/**
 * 默认全局Scheduler监听器
 *
 * @Author zhangxingjia
 * @Date 2023/11/2 20:10
 * @Version: 1.0
 */
public class DefaultGlobalSchedulerListener extends SchedulerListenerSupport {

    /**
     * 在Job被安排到被触发之前调用。
     * @param trigger
     */
    @Override
    public void jobScheduled(Trigger trigger) {
        getLog().info("Job scheduled >>> Trigger Name: {}, Group: {}" ,trigger.getKey().getName() ,trigger.getKey().getGroup());
    }

    /**
     *  在Job被卸载之前调用。
     * @param triggerKey
     */
    @Override
    public void jobUnscheduled(TriggerKey triggerKey) {
        getLog().info("Job unscheduled >>> Trigger Key: {}, Group: {}" ,triggerKey.getName() ,triggerKey.getGroup());
    }

    /**
     * 在Trigger被删除之前调用。
     * @param trigger
     */
    @Override
    public void triggerFinalized(Trigger trigger) {
        getLog().info("Trigger finalized >>> Trigger Name: {}, Group: {}" ,trigger.getKey().getName() ,trigger.getKey().getGroup());
    }

    /**
     * 在Trigger组被暂停之前调用。
     * @param triggerKey
     */
    @Override
    public void triggerPaused(TriggerKey triggerKey) {
        getLog().info("Trigger paused >>> Trigger Key: {}, Group: {}" ,triggerKey.getName() ,triggerKey.getGroup());
    }

    /**
     * 在Trigger组被恢复之前调用。
     * @param triggerKey
     */
    @Override
    public void triggerResumed(TriggerKey triggerKey) {
        getLog().info("Trigger resumed >>> Trigger Key: {}, Group: {}" ,triggerKey.getName() ,triggerKey.getGroup());
    }

    /**
     * 当触发器组被暂停时触发
     * @param triggerGroup
     */
    @Override
    public void triggersPaused(String triggerGroup) {
        getLog().info("Triggers paused in group: {}" ,triggerGroup);
    }

    /**
     * 当触发器组被恢复时触发
     * @param triggerGroup
     */
    @Override
    public void triggersResumed(String triggerGroup) {
        getLog().info("Triggers resumed in group: {}" ,triggerGroup);
    }

    /**
     * 在Job被添加到Scheduler之前调用。
     * @param jobDetail
     */
    @Override
    public void jobAdded(JobDetail jobDetail) {
        getLog().info("Job added >>> Job Name: {}, Group: {}" ,jobDetail.getKey().getName() ,jobDetail.getKey().getGroup());
    }

    /**
     * 在Job被删除之前调用。
     * @param jobKey
     */
    @Override
    public void jobDeleted(JobKey jobKey) {
        getLog().info("Job deleted >>> Job Key: {}, Group: {}" ,jobKey.getName() ,jobKey.getGroup());
    }

    /**
     * 在Job组被暂停之前调用。
     * @param jobKey
     */
    @Override
    public void jobPaused(JobKey jobKey) {
        getLog().info("Job paused >>> Job Key: {}, Group: {}", jobKey.getName() ,jobKey.getGroup());
    }

    /**
     * 在Job组被恢复之前调用。
     * @param jobKey
     */
    @Override
    public void jobResumed(JobKey jobKey) {
        getLog().info("Job resumed >>> Job Key: {}, Group: {}" ,jobKey.getName(), jobKey.getGroup());
    }

    /**
     * 当作业组被暂停时触发
     * @param jobGroup
     */
    @Override
    public void jobsPaused(String jobGroup) {
        getLog().info("Jobs paused in group: {}" ,jobGroup);
    }

    /**
     * 当作业组被恢复时触发
     * @param jobGroup
     */
    @Override
    public void jobsResumed(String jobGroup) {
        getLog().info("Jobs resumed in group: {}" ,jobGroup);
    }

    /**
     * 在调度器发生错误时调用。
     * @param msg
     * @param cause
     */
    @Override
    public void schedulerError(String msg, SchedulerException cause) {
        getLog().error("Scheduler error >>> Message: {} , Cause: {}" , msg, cause.getMessage());
    }

    /**
     * scheduler被设为standBy等候模式时被执行
     */
    @Override
    public void schedulerInStandbyMode() {
        getLog().info("Scheduler in standby mode.");
    }

    /**
     * scheduler启动时被执行
     */
    @Override
    public void schedulerStarted() {
        getLog().info("Scheduler started.");
    }

    /**
     * scheduler正在启动时被执行
     */
    @Override
    public void schedulerStarting() {
        getLog().info("Scheduler starting.");
    }

    /**
     * scheduler关闭时被执行
     */
    @Override
    public void schedulerShutdown() {
        getLog().info("Scheduler shutdown.");
    }

    /**
     * scheduler正在关闭时被执行
     */
    @Override
    public void schedulerShuttingdown() {
        getLog().info("Scheduler shutting down.");
    }

    /**
     * scheduler中所有数据包括jobs, triggers和calendars都被清空时被执行
     */
    @Override
    public void schedulingDataCleared() {
        getLog().info("Scheduling data cleared.");
    }
}
